home *** CD-ROM | disk | FTP | other *** search
/ 64'er Special 15 / 64er_Magazin_Sonderheft_15_19xx_Markt__Technik_de_Side_A.d64 / int-floppy src (.txt) < prev    next >
Commodore BASIC  |  2022-10-26  |  7KB  |  255 lines

  1. 1 ; *** intelligente floppy ****
  2. 2 ; ****************************
  3. 3 ; * written by stefan rother *
  4. 4 ; *   frauenzellstrasse 26   *
  5. 5 ; *     8400 regensburg      *
  6. 6 ; ****************************
  7. 7 ; *  (c) 1986 markt&technik  *
  8. 8 ; *        verlag ag         *
  9. 9 ; ****************************
  10. 10 .ba$ce18 ;start bei 52760
  11. 20  jsr$aefd;auf komma pruefen
  12. 30  jsr$b79e;8 bit-zahl nach x holen
  13. 60  stxz1;und zwischenspeichern
  14. 65  lda#07;maske zum ausfiltern
  15. 70  andz1;von bit 0-2 erstellen
  16. 74 ;
  17. 75 ;sprungtabelle
  18. 76 ;
  19. 80  bney1;bei 0
  20. 85  jmpload1;prg mit ',8' laden
  21. 90 y1 cmp#01;mit 1 vergleichen
  22. 100  bney2;wenn 1 ,dann
  23. 105  jmpload2;prg mit ',8,1' laden
  24. 110 y2 cmp#02;mit 2 vergleichen
  25. 120  bney3;wenn 2 ,dann
  26. 125  jmpsave;zur saveroutine springen
  27. 130 y3 cmp#03;mit 3 vergleichen
  28. 140  bney4;wenn 3 ,dann
  29. 145  jmpgoto;'goto'-routine aufrufen
  30. 150 y4 cmp#04;und dasselbe mit 4
  31. 160  bney5;wenn 4,dann
  32. 165  jmpjump;'jmp'-assemblerbefehl
  33. 170 y5 rts;wenn kein modus,dann zurueck
  34. 180 ;
  35. 185 ;algorithmus zum auswerten
  36. 186 ;eines diskettenwechsels
  37. 188 ;
  38. 190 floppy lda#08;parameter fuer
  39. 200  ldx#08;'open 8,8,15'
  40. 210  ldy#15;setzen
  41. 220  jsr$ffba;file vorbereiten
  42. 230  lda#00;kein filename
  43. 240  jsr$ffbd;filenamen vorbereiten
  44. 250  jsr$ffc0;'open'
  45. 260  jmpa;zur datenauswertung
  46. 270 x ldx#08;fuer kanal 8
  47. 280  jsr$ffc9;cmd out aktivieren
  48. 290  ldx#00;zaehler auf null
  49. 300 b1 ldat1,x;und von floppy
  50. 310  jsr$ffd2;per befehlssequenz
  51. 320  inx;von 6 zeichen
  52. 330  cpx#06;inhalt von $1c00
  53. 340  bneb1;abfragen
  54. 350  jsr$ffcc;cmd off
  55. 360 y ldx#08
  56. 370  jsr$ffc6;cmd in aktivieren
  57. 380  jsr$ffcf;besagtes byte holen
  58. 385  pha;und zwischenspeichern
  59. 390  jsr$ffcc;cmd inaktivieren
  60. 395  pla;byte zurueckholen
  61. 400  rts;ende des unterprg's 'daten holen'
  62. 410 ;
  63. 411 ;fortfuehrung des hauptprogramms
  64. 412 ;
  65. 415 a jsrbit05;bit 5=1 (dikettenwechsel) ?
  66. 417  jsrled;ja,dann je nach bit 6 led an
  67. 420  jsrx;hole aktuelles infobyte
  68. 430  andz2;und filtere lichschrankenbit
  69. 440  bnea;heraus-bei 1 warten
  70. 450 ;
  71. 460 b jsrx
  72. 470  andz2
  73. 480  beqb;warte bis bit=1,ls-unterbrechung
  74. 485 ;
  75. 490 c jsrled;einsprung,wenn vorher bit5=0
  76. 500  jsrx
  77. 510  andz2
  78. 520  bnec;warte,bis ls frei
  79. 530 ;
  80. 540  ldaz1;bit 7 des befehlbytes testen
  81. 550  bplf;bei 1 schreibschutz
  82. 560 ;
  83. 570 j ldx#$ff;warteschleife
  84. 580 e ldy#$ff;wegen schreibschutz
  85. 590 d dey
  86. 600  bned
  87. 610  dex
  88. 620  bnee
  89. 630  jmpg
  90. 640 ;
  91. 650 f jsrx;wenn kein schreibschutz,
  92. 660  andz2;dann auf kerbe
  93. 670  beqf;warten
  94. 680 ;
  95. 690 g ldx#$02;unbedingte warteschleife
  96. 700 k ldy#$a0
  97. 704 i decz5
  98. 706  bnei
  99. 710 h dey
  100. 720  bnei
  101. 730  dex
  102. 740  bnek
  103. 745 ;
  104. 750 ;routine ,die den motor der floppy einschaltet
  105. 755 ;und auf geschlossenes laufwerk prueft
  106. 756 ;
  107. 760  ldx#08;kanal 8
  108. 766 ;
  109. 770  jsr$ffc9;fuer cmd out
  110. 780  ldx#00
  111. 790 b2 ldat2,x
  112. 800  jsr$ffd2
  113. 810  inx
  114. 820  cpx#05;laenge des befehls
  115. 830  bneb2
  116. 840  jsr$ffcc;cmd inaktivieren
  117. 841  ldx#08;nochmals fuer neue anweisung
  118. 842  jsr$ffc9;aktivieren,um
  119. 843  ldx#00;der floppy eine kurze
  120. 844 b4 ldat4,x;initialisierungzeit
  121. 845  jsr$ffd2;zu gestatten
  122. 846  inx
  123. 847  cpx#06;diemal 6 befehlbytes
  124. 848  bneb4
  125. 849  jsr$ffcc;kanal 8 inaktivieren
  126. 850  jsry;laufwerk schon einsatzbereit ?
  127. 860  cmp#$ff
  128. 870  beqg;nein
  129. 880 ;
  130. 890  lda#08
  131. 900  jsr$ffc3;close 8
  132. 910  rts;ende der auswertung
  133. 1470 ;
  134. 1480 ;hier wird das hauptprogamm je nach
  135. 1490 ;befehlsbyte weitergefuehrt
  136. 1495 ;
  137. 1500 load1 lda#00;kennzeichen fuer
  138. 1510  stakk+1;'load ,8'
  139. 1520  jmpload;zur laderoutine
  140. 1540 load2 lda#01;oder fuer absolutes laden
  141. 1550  stakk+1;'load ,8,1'
  142. 1555 load jsr$aefd;prueft auf komma
  143. 1560  jsrfloppy;auf diskettenwechsel warten
  144. 1575  jsrget;filenamen holen
  145. 1576  jmpld;und laden
  146. 1580 get jsr$ad9a;vorauswerten und
  147. 1590  jsr$b6a3;auswerten des filenamens
  148. 1600  staz4;laenge,
  149. 1610  stxlo;lo-adresse und
  150. 1620  styhi;hi-adresse merken
  151. 1700  rts;zurueck
  152. 1710 ;---
  153. 1720 goto jsr$aefd;auf komma pruefen
  154. 1730  jsrfloppy;auf diskettenwechsel warten
  155. 1750  jsr$ad8a;sprungadresse fuer 'goto' holen
  156. 1760  jsr$b7f7;in 16 bit zahl wandeln
  157. 1770  jsr$a8a3;einsprung in die 'goto'-routine
  158. 1780  jmp$a7ae;und zur interpreterschleife
  159. 1790 ;
  160. 1800 jump jsr$aefd;auf komma pruefen
  161. 1810  jsrfloppy;auf diskettenwechsel warten
  162. 1830  jsr$ad8a;sprungadresse fur 'jmp' holen
  163. 1840  jsr$b7f7;in 16 bit zahl wandeln
  164. 1846  lda#$a7;startadresse des basic-
  165. 1847  pha
  166. 1848  lda#$ae;interpreters auf stack
  167. 1849  pha
  168. 1850  jmp($14);und zum maschinenprogramm
  169. 1860 ;
  170. 1861 save ldaz1;wenn save und schreib-
  171. 1863  bplon;schutz zusammen,dann
  172. 1865  jsr$b248;'illegal quantity error'
  173. 1870 on jsr$aefd;auf komma pruefen
  174. 1880  jsrfloppy;auf diskettenwechsel warten
  175. 1900  jsrget;filenamen holen
  176. 1910  ldx#08;geraeteadresse 8
  177. 1920  jsr$ffba;file vorbereiten
  178. 1930  ldxz4;laenge
  179. 1940  ldxlo;und adresse des file-
  180. 1950  ldyhi;namens holen
  181. 1960  jsr$ffbd;filenamen vorbereiten
  182. 1965  jsrget16;16 bit startadresse fuer save
  183. 1967  stx$fe;merken
  184. 1969  sty$ff
  185. 1971  jsrget16;16 bit endadresse fuer save
  186. 1973  lda#$fe;steht bei $fe/$ff
  187. 1975  jmpcont
  188. 1976 ;
  189. 1977 ;routine zum holen einer 16 bit zahl und auswertung
  190. 1978 ;
  191. 1979 get16 jsr$aefd;komma?
  192. 1981  jsr$ad8a;16 bit zahl holen
  193. 1983  jsr$b7f7;und umwandeln
  194. 1985  ldx$14;lo-byte
  195. 1987  ldy$15;hi-byte der zahl
  196. 1989  rts;ende der unterroutine
  197. 1990 ;
  198. 2000 cont jsr$ffd8;'save'
  199. 2010  rts;zurueck zu basic
  200. 2015 ;
  201. 2020 ;laden eines programms
  202. 2025 ;
  203. 2030 ld ldx#08
  204. 2040 kk ldy#01
  205. 2050  jsr$ffba;file vorbereiten
  206. 2060  ldaz4
  207. 2070  ldxlo
  208. 2080  ldyhi
  209. 2090  jsr$ffbd;filenamen vorbereiten
  210. 2100  lda#00;load-flag auf 0
  211. 2101  sta$0a;und merken
  212. 2103  jmp$e16f;einsprung in die 'load'-routine
  213. 2200 ;
  214. 2340 ;routine prueft bit 6 des befehlbytes
  215. 2345 ;und schaltet bei 1 die rote led am
  216. 2346 ;laufwerk an.
  217. 2348 ;
  218. 2350 led lda#64
  219. 2360  andz1;test auf bit 6
  220. 2380  beqende;bei 0 'rts'
  221. 2390  ldx#08
  222. 2400  jsr$ffc9;cmd out aktivieren
  223. 2410  ldx#00
  224. 2420 b3 ldat3,x
  225. 2430  jsr$ffd2
  226. 2440  inx
  227. 2450  cpx#05;5 befehlbytes
  228. 2460  bneb3
  229. 2470  jsr$ffcc;cmd inaktivieren
  230. 2480 ende rts;ende des unterprogramms
  231. 2490 bit05 lda#32;testet bit 5 des befehlbytes
  232. 2500  andz1
  233. 2530  bneende;gesetzt,dann diskettenwechsel
  234. 2540  pla;nein,
  235. 2550  pla;dann stack "saeubern"
  236. 2560  jmpc;und weiter auf diskette warten
  237. 2570 ;
  238. 2575 ;tabelle von anweisungen und (aktuellen)
  239. 2576 ;zwischenspeichern
  240. 2580 ;
  241. 2610 t1 .tx"m-r";auslesen des diskkontrollers
  242. 2620 .by00,28,1 ;der floppy (wegen ls)
  243. 2630 t2 .tx"m-e";floppymotor
  244. 2640 .by71,198 ;einschalten und auf 'ready' testen
  245. 2644 t3 .tx"m-e";befehlssequenz fuer
  246. 2646 .by$18,$c1 ;led am laufwerk anschalten
  247. 2650 t4 .tx"m-r";schon 'ready' ?
  248. 2660 .by$ff,0,1
  249. 2670 z1 .by$00;platz fuer befehlsbyte
  250. 2680 z2 .by$10;16 fuer 'and' verknuepfung (ls)
  251. 2700 z4 .by$00;speicher fuer filenamenlaenge
  252. 2705 z5 .by$00;zaehler fuer warteschleife
  253. 2730 lo .by$00;zwischenspeicher fuer
  254. 2740 hi .by$00;filenamenadresse
  255.